<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <script>
    function Str(uname){
      this.name=uname
    }
    //首先实例化
    const str=new Str('ikun')
    /* //实例化过程
    //1.创建一个空对象
    const str=new Object()
    //2.修改空对象的原型链指向
    str.__proto=Str.prototype
    //3.修改this指向并获取参数，并且执行构造函数的函数体
    Str.this.call(str)
    //4.return 结果
    //判断构造函数return的结果是简单数据类型还是复杂数据类型，如果是复杂数据类型就返回构造函数返回值,如果是简单数据类型就返回该对象 */

    //判断实例化对象的原型对象是否等于构造函数的原型对象
    console.log(str.__proto__===Str.prototype);
    //判断实构造函数的原型对象的constructor属性是否是构造函数
    console.log(Str.prototype.constructor===Str);
    //判断实例化对象的原型对象的原型对象是否是Object的原型对象
    console.log(str.__proto__.__proto__===Object.prototype);
    //判断Object的原型对象的constructor属性是否是内置Object构造函数
    console.log(Object.prototype.constructor===Object);
    //判断构造函数的原型对象是否是Function内置构造函数的原型对象
    console.log(Str.__proto__===Function.prototype);
    //判断内置Object构造函数的原型对象是否是Function内置构造函数的原型对象
    console.log(Object.__proto__===Function.prototype);
    //判断Function内置构造函数的原型对象是否指向Function的原型对象
    console.log(Function.__proto__===Function.prototype);
    //判断内置构造函数的原型对象的原型对象是否等于Object的原型对象
    console.log(Str.__proto__.__proto__===Object.prototype);
    //判断Object的原型对象的原型对象是什么
    console.log(Object.prototype.__proto__);
    
  </script>
</body>
</html>